package com.qdxwx.data.mapper.user;

import com.qdxwx.common.page.PageRequest;
import com.qdxwx.models.user.User;
import com.qdxwx.models.user.UserQuery;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

/**
 * Qdx NetSchool Platform
 * @author qdxwx
 * @updateTime 2022/5/25
 * @description
 */
@Repository
public interface UserMapper {
	/**
	 * 创建用户
	 */
	int insert(User user);

	/**
	 * 通过用户ID查询用户
	 */
	User selectById(Long userId);

	User selectByMobile(String mobile);

	User selectByEmail(String email);

	User selectByLoginName(String loginName);

	User selectByToken(long userId, String token);
	/**
	 * 修改用户密码
	 */
	void updateUserPwd(User user);

	/**
	 * 分页查询用户
	 */
	List<User> selectList(@Param("e") UserQuery query, @Param("page") PageRequest page);

	/**
	 *
	 * @param query
	 * @return
	 */
	long selectCount(@Param("e") UserQuery query);
	/**
	 * 禁用或启用用户
	 */
	void updateUserStatus(User user);

	/**
	 * 修改用户头像
	 */
	void updateAvatar(User user);

	/**
	 * 修改用户信息
	 */
	int updateUser(User user);

	/**
	 * 修改个中心个性化图片URL
	 */
	void updateUserBannerUrl(User user);

	/**
	 * 通过标识更新未读数加一
	 */
	void updateLetterCount(@Param("userId") Long userId, @Param("count") int count);

	/**
	 * 通过标识更新未读数清零
	 */
	void resetLetterCount(@Param("userId") Long userId);

	/**
	 * 更新用户的上传统计系统消息时间
	 */
	void updateLoginTime(@Param("userId") Long userId, @Param("time") LocalDateTime time);

	int deleteUserByIds(String[] ids);

    int deleteById(long userId);

	int updateMobile(@Param("e")User user);

    List<User> selectLatelyStudentList(@Param("courseId") int courseId, @Param("page") PageRequest page);

	List<User> selectStudentList(@Param("courseId") int courseId, @Param("page") PageRequest page);

	int countStudent(int courseId);

	List<User> selectMyStudentList(@Param("userId") long userId, @Param("page") PageRequest page);

	int countMyStudent(long userId);
}
